// 这就是一个工具类，没有继承 react.component
class MUtil{
  request(param){
    return new Promise((resolve, reject) => {
      $.ajax({
        type        : param.type      || 'get',
        url         : param.url       || '',
        dataType    : param.dataType  || 'json',
        data        : param.data      || null,
        success     : res => {
          // 数据请求成功
          if(0 === res.status){
            typeof resolve === 'function' && resolve(res.data, res.msg);
          }
          // 没有登录状态，强制登录
          else if(10 === res.status){
            this.doLogin();
          }
          else{
            typeof reject === 'function' && reject(res.msg || res.data);
          }
        },
        error       : err => {
          // err.statusText http 请求里面的错误
          typeof reject === 'function' && reject(err.statusText);
        }
      });
    });
  }

  // 跳转登录
  doLogin(){
    window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
  }

  // 获取URL参数
  getUrlParam(name){
    // xxx.com?param=123&param1=456, 如何用 正则 取出来, 代码如下
    // window.location.search 取完之后，就是这一部分：?param=123&param1=456
    let queryString = window.location.search.split('?')[1] || '';
    // 这个就是路径中 param=123&param1=456 正则表达式
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    // console.log(reg);
    let result = queryString.match(reg);
    // result = ['param=123', '', '123', '&']
    return result ? decodeURIComponent(result[2]) : null;
  }

  successTips(successMsg){
    alert(successMsg || '操作成功！');
  }

  // 错误提示
  errorTips(errMsg){
    alert(errMsg || '好像那里不对了～');
  }

  // 存储数据（本地存储）
  setStorage(name, data){
    // 处理传递过来的 data 的不同类型
    let dataType = typeof data;
    // json 对象
    if(dataType === 'object'){
      window.localStorage.setItem(name, JSON.stringify(data));
    }
    // 基础类型
    else if(['number','string','boolean'].indexof(dataType) >= 0){
      window.localStorage.setItem(name);
    }
    // 其他类型不支持的类型，比如 function
    else{
      alert('该类型不能用于本地');
    }
  }

  // 取出存储内容
  getStorage(name){
    let data = window.localStorage.getItem(name);
    if(data){
      return JSON.parse(data);
    }
    else{
      return '';
    }
  }

  // 删除存储内容
  removeStorage(name){
    window.localStorage.removeItem(name);
  }
}

export default MUtil;